/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Miscelaneo.TiposGenericos.Demo;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 *
 * @author AMD
 */
public class Lista_con_Iterator <E>  implements Iterator<E>{
    private E elemento;
    private Lista_con_Iterator<E> subLista;

    public Lista_con_Iterator() {
        this.elemento = null;
        this.subLista = null;
    }
    public Lista_con_Iterator(E elemento, Lista_con_Iterator<E> subLista) {
        this.elemento = elemento;
        this.subLista = subLista;
    }
    public E getElemento() {
        return elemento;
    }
    public void setElemento(E elemento) {
        this.elemento = elemento;
    }
    public Lista_con_Iterator<E> getSubLista() {
        return subLista;
    }
    public void setSubLista(Lista_con_Iterator<E> subLista) {
        this.subLista = subLista;
    }
    public boolean  EsVacia(){
        return (elemento == null &&subLista == null);
    }
    @Override
    public boolean hasNext() {
        if (EsVacia()) return false;
        else 
            return (!subLista.EsVacia())? true:false;
    }
    @Override
    public E next() {
       if (hasNext())
           return subLista.elemento;
       else
           throw new NoSuchElementException("No hay siguiente elemento");
    }
    @Override
    public void remove() {
        if (hasNext()){
            elemento = subLista.subLista.elemento;
            subLista = subLista.subLista.subLista;
        }
        else 
            throw new UnsupportedOperationException("Not supported yet.");
    }
}